rcar_gen3: plat: Add missing cpu_on_check() implementation
authorMarek Vasut <[email protected]>
Sat, 5 Jan 2019 15:21:14 +0000 (16:21 +0100)
committerMarek Vasut <[email protected]>
Tue, 29 Jan 2019 05:07:21 +0000 (06:07 +0100)
The ATF code fails to build with PMIC_ROHM_BD9571=0, add the missing
function into the PWRC code.

Signed-off-by: Marek Vasut <[email protected]>
drivers/renesas/rcar/pwrc/pwrc.c
drivers/renesas/rcar/pwrc/pwrc.h
plat/renesas/rcar/plat_pm.c

index b005caff69a57ee5ed903e2581ae20d98ed2588d..d7f088094b884294efd77596dae1c1e9ad5002b3 100644 (file)
@@ -768,3 +768,43 @@ count_ca57:
 done:
        return count;
 }
+
+int32_t rcar_pwrc_cpu_on_check(uint64_t mpidr)
+{
+       uint64_t i;
+       uint64_t j;
+       uint64_t cpu_count;
+       uintptr_t reg_PSTR;
+       uint32_t status;
+       uint64_t my_cpu;
+       int32_t rtn;
+       uint32_t my_cluster_type;
+
+       const uint32_t cluster_type[PLATFORM_CLUSTER_COUNT] = {
+                       RCAR_CLUSTER_CA53,
+                       RCAR_CLUSTER_CA57
+       };
+       const uintptr_t registerPSTR[PLATFORM_CLUSTER_COUNT] = {
+                       RCAR_CA53PSTR,
+                       RCAR_CA57PSTR
+       };
+
+       my_cluster_type = rcar_pwrc_get_cluster();
+
+       rtn = 0;
+       my_cpu = mpidr & ((uint64_t)(MPIDR_CPU_MASK));
+       for (i = 0U; i < ((uint64_t)(PLATFORM_CLUSTER_COUNT)); i++) {
+               cpu_count = rcar_pwrc_get_cpu_num(cluster_type[i]);
+               reg_PSTR = registerPSTR[i];
+               for (j = 0U; j < cpu_count; j++) {
+                       if ((my_cluster_type != cluster_type[i]) || (my_cpu != j)) {
+                               status = mmio_read_32(reg_PSTR) >> (j * 4U);
+                               if ((status & 0x00000003U) == 0U) {
+                                       rtn--;
+                               }
+                       }
+               }
+       }
+       return (rtn);
+
+}
index 3cdac694c9e6f82875fd9e050034964141bcde53..d4d6fc4412d03bee4bdc89efba798fd18770f6cd 100644 (file)
@@ -44,6 +44,7 @@ void rcar_pwrc_enable_interrupt_wakeup(uint64_t mpidr);
 void rcar_pwrc_clusteroff(uint64_t mpidr);
 void rcar_pwrc_cpuoff(uint64_t mpidr);
 void rcar_pwrc_cpuon(uint64_t mpidr);
+int32_t rcar_pwrc_cpu_on_check(uint64_t mpidr);
 void rcar_pwrc_setup(void);
 
 uint32_t rcar_pwrc_get_cpu_wkr(uint64_t mpidr);
index 245a45a32d310f408f519ea174edd66042d70069..47eda9a0218fe4b82866b8a21298f7b3330bbc9e 100644 (file)
@@ -175,7 +175,7 @@ static void __dead2 rcar_system_off(void)
        uint64_t cpu = read_mpidr_el1() & 0x0000ffff;
        int32_t rtn_on;
 
-       rtn_on = cpu_on_check(cpu);
+       rtn_on = rcar_pwrc_cpu_on_check(cpu);
 
        if (cpu == rcar_boot_mpidr)
                panic();